//
//  MKUIPickerViewTreeModel.h
//  MKUI
//	联动的滚轮数据模型
//  Created by sushangjin on 15/6/19.
//  Copyright (c) 2015年 sushangjin. All rights reserved.
//

#import "MKUIPickerViewModel.h"
#import "MKUIPickerViewTreeNode.h"
NS_ASSUME_NONNULL_BEGIN
@interface MKUIPickerViewTreeModel : MKUIPickerViewModel{
	@protected
	NSMutableArray<__kindof MKUIPickerViewTreeNode *> *_rootNodes;
}
@property(nonatomic,strong,nullable) NSArray<__kindof MKUIPickerViewTreeNode *> *rootNodes;//第一级的结点列表@[MKUIPickerViewTreeNode],它包含了整棵树的信息,以及所有的单元格数据.当改变了树结构之后,调用reloadPickerViewData方法来刷新视图

- (void)addRootNode:(MKUIPickerViewTreeNode *)node;
- (void)insertRootNode:(MKUIPickerViewTreeNode *)node atIndex:(NSInteger)index;
- (void)removeRootNode:(MKUIPickerViewTreeNode *)node;
- (void)removeRootNodeAtIndex:(NSInteger)index;
- (void)removeAllRootNodes;

/**
 *  使用第一级结点初始化数据模型
 *
 *  @param rootNodes 第一级结点列表
 *
 *  @return 数据模型
 */
- (id)initWithRootNodes:(nullable NSArray<MKUIPickerViewTreeNode *> *)rootNodes;

/**
 *  选中某个结点,如果node不为叶子结点,会级联选择它的第一个子结点
 *
 *  @param node 结点
 */
- (void)selectNode:(MKTreeNode *)node;

/**
 *  选中某个结点,如果node不为叶子结点,会级联选择它的第一个子结点
 *
 *  @param node        结点
 *  @param passingTest 用于结点比较的方法
 */
- (void)selectNode:(MKTreeNode *)node passingTest:(BOOL(^ __nullable)(MKTreeNode *n1,MKTreeNode *n2))passingTest;

/**
 *  查找指定title的末结点
 *
 *  @param title 标题
 *
 *  @return 最后一级的结点的索引
 */
- (nullable NSIndexPath *)indexPathForLastCellModelWithTitle:(NSString *)title;
- (nullable __kindof MKUIPickerViewTreeCellModel *)lastCellModelWithTitle:(NSString *)title;
- (nullable __kindof MKUIPickerViewTreeNode *)lastNodeWithTitle:(NSString *)title;
@end

NS_ASSUME_NONNULL_END
